﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace DataTier.Repository
{
    /// <summary>
    /// Репозиторий для работы с подсказками
    /// </summary>
    public class PromptMessageRepository : RepositoryBase
    {
        public PromptMessageRepository()
        {
        }


        public PromptMessageRepository(IDbConnection connection)
            : base(connection)
        {

        }


        /// <summary>
        /// Возвращает перечень подсказок для конкретной страницы
        /// </summary>
        /// <param name="namePage"></param>
        /// <returns></returns>
        public string[] GetPromptMessages(string namePage)
        {
            using (var dbcontext = CreateDataContext())
            {
                string[] messages = dbcontext.PromptingMessage
                    .Where(m => (!string.IsNullOrEmpty(m.ForPage)) && m.ForPage.ToLower().Contains(namePage.ToLower()))
                    .OrderBy(m => m.Number)
                    .Select(m => m.Message).ToArray();

                return messages;
            }
        }


        /// <summary>
        /// Возвращает перечень подсказок для конкретной страницы
        /// </summary>
        /// <param name="namePage"></param>
        /// <returns></returns>
        public List<PromptingMessage> GetPromptMessageList(string namePage)
        {
            using (var dbcontext = CreateDataContext())
            {
                var messages = dbcontext.PromptingMessage
                    .Where(m => (!string.IsNullOrEmpty(m.ForPage)) && m.ForPage.ToLower().Contains(namePage.ToLower()))
                    .OrderBy(m => m.Number).ToList();

                return messages;
            }
        }


        /// <summary>
        /// Возвращает конкретное кообщение по его идентификатору
        /// </summary>
        /// <param name="currentUserId"></param>
        /// <param name="messageId"></param>
        /// <returns></returns>
        public PromptingMessage GetPromptMessage(int currentUserId, int messageId)
        {
            using (var dbcontext = CreateDataContext())
            {
                var message = dbcontext.PromptingMessage
                    .Where(m => m.PromptId == messageId).FirstOrDefault();

                return message;
            }
        }


        /// <summary>
        /// Сохранение сообщения-подсказки
        /// </summary>
        /// <param name="currentUserId"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public int SavePromptMessage(int currentUserId, PromptingMessage message)
        {
            using (var dbcontext = CreateDataContext())
            {
                var numObj = dbcontext.PromptingMessage.
                    Where(m => m.ForPage.ToLower().Contains((!string.IsNullOrEmpty(message.ForPage)) ? message.ForPage.ToLower() : "  "));
                int num = (numObj.Any()) ? (numObj.Select(m => m.Number).Max() + 1) : 1;
                
                PromptingMessage savedMessage = null;
                if (message.PromptId > 0)
                {
                    var msg = dbcontext.PromptingMessage.Where(m => m.PromptId == message.PromptId).FirstOrDefault();
                    if (msg != null)
                    {
                        savedMessage = msg;
                        savedMessage.Message = message.Message;
                    }
                    else // Создаем новую подсказку
                    {
                        savedMessage = new PromptingMessage()
                        {
                            PromptId = 0,
                            Number = num,
                            ForPage = message.ForPage,
                            Message = message.Message
                        };
                        dbcontext.PromptingMessage.AddObject(savedMessage);
                    }
                }
                else // Если создаем новую подсказку
                {
                    savedMessage = new PromptingMessage()
                    {
                        PromptId = 0,
                        Number = num,
                        ForPage = message.ForPage,
                        Message = message.Message
                    };
                    dbcontext.PromptingMessage.AddObject(savedMessage);
                }

                dbcontext.SaveChanges();

                return savedMessage.PromptId;
            }
        }


        /// <summary>
        /// Удаление сообщения-подсказки
        /// </summary>
        /// <param name="currentUserId"></param>
        /// <param name="messageId"></param>
        public void DeletePromptMessage(int currentUserId, int messageId)
        {
            using (var dbcontext = CreateDataContext())
            {
                var message = dbcontext.PromptingMessage.Where(m => m.PromptId == messageId).FirstOrDefault();
                if (message != null)
                {
                    dbcontext.PromptingMessage.DeleteObject(message);
                    dbcontext.SaveChanges();
                }
            }
        }

    }
}
